In [1]:
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
#from raceplotly.plots import barplot
In [2]:
races_data = pd.read_csv(r'Data\races.csv')
diverstanding_data = pd.read_csv('Data\driver_standings.csv')
drivers_data = pd.read_csv('Data\drivers.csv')
constructorstanding_data = pd.read_csv('Data\constructor_standings.csv')
constructors_data = pd.read_csv('Data\constructors.csv')
constructor_race_data = pd.read_csv('Data\constructor_results.csv')
qualifying_data = pd.read_csv('Data\qualifying.csv')
qualifying_data.rename(columns ={'position':'quali_position'},inplace=True)
constructors_data.drop(columns=['url'],inplace=True)
constructors_data.rename(columns={'name':'constructor_name','nationality':'constructor_nationality'},inplace=True)
In [3]:
data_2011 = races_data.where(races_data['year']==2011).dropna()
data_2011 = data_2011.merge(diverstanding_data,on='raceId').dropna()
data_2011 = data_2011.merge(drivers_data,on='driverId').dropna()
data_2011.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2011 = data_2011.sort_values(['round','position'])
data_2011 = data_2011.merge(qualifying_data,on=['raceId','driverId'])
data_2011.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2011 = data_2011.merge(constructors_data,on='constructorId')
data_2011 = data_2011.sort_values(['round','position'])
data_2011
Out[3]:
year round circuitId name points position positionText wins driverRef code ... surname constructorId number quali_position q1 q2 q3 constructorRef constructor_name constructor_nationality
0 2011.0 1.0 1.0 Australian Grand Prix 25.0 1 1 1 vettel VET ... Vettel 9 1 1 1:25.296 1:24.090 1:23.529 red_bull Red Bull Austrian
38 2011.0 1.0 1.0 Australian Grand Prix 18.0 2 2 0 hamilton HAM ... Hamilton 1 3 2 1:25.384 1:24.595 1:24.307 mclaren McLaren British
76 2011.0 1.0 1.0 Australian Grand Prix 15.0 3 3 0 petrov PET ... Petrov 4 10 6 1:25.543 1:25.582 1:25.247 renault Renault French
113 2011.0 1.0 1.0 Australian Grand Prix 12.0 4 4 0 alonso ALO ... Alonso 6 5 5 1:25.707 1:25.242 1:24.974 ferrari Ferrari Italian
1 2011.0 1.0 1.0 Australian Grand Prix 10.0 5 5 0 webber WEB ... Webber 9 2 3 1:25.900 1:24.658 1:24.395 red_bull Red Bull Austrian
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
264 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 22 22 0 kovalainen KOV ... Kovalainen 205 20 19 1:15.068 \N \N lotus_racing Lotus Malaysian
446 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 23 23 0 liuzzi LIU ... Liuzzi 164 23 21 1:16.631 \N \N hrt HRT Spanish
301 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 24 24 0 ambrosio DAM ... d'Ambrosio 166 25 23 1:17.019 \N \N virgin Virgin British
302 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 25 25 0 glock GLO ... Glock 166 24 24 1:17.060 \N \N virgin Virgin British
447 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 27 27 0 ricciardo RIC ... Ricciardo 164 22 22 1:16.890 \N \N hrt HRT Spanish

448 rows × 21 columns

In [4]:
data_teams_2011 = races_data.where(races_data['year']==2011).dropna()
data_teams_2011 = data_teams_2011.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2011 = data_teams_2011.merge(constructors_data,on='constructorId').dropna()
data_teams_2011.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2011 = data_teams_2011.sort_values(['round','position'])
data_teams_2011
Out[4]:
year round circuitId name points position positionText wins constructorRef constructor_name
171 2011.0 1.0 1.0 Australian Grand Prix 35.0 1 1 1 red_bull Red Bull
152 2011.0 1.0 1.0 Australian Grand Prix 26.0 2 2 0 mclaren McLaren
114 2011.0 1.0 1.0 Australian Grand Prix 18.0 3 3 0 ferrari Ferrari
133 2011.0 1.0 1.0 Australian Grand Prix 15.0 4 4 0 renault Renault
95 2011.0 1.0 1.0 Australian Grand Prix 4.0 5 5 0 toro_rosso Toro Rosso
... ... ... ... ... ... ... ... ... ... ...
113 2011.0 19.0 18.0 Brazilian Grand Prix 41.0 8 8 0 toro_rosso Toro Rosso
37 2011.0 19.0 18.0 Brazilian Grand Prix 5.0 9 9 0 williams Williams
75 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 10 10 0 lotus_racing Lotus
225 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 11 11 0 hrt HRT
56 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 12 12 0 virgin Virgin

226 rows × 10 columns

In [5]:
teams_color_2011 = {'Red Bull':dict(color='#004c6c'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Renault':dict(color='#FFF500'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Lotus':dict(color='#000000'),
                    'Sauber':dict(color='#960000'),
                    'HRT':dict(color='#5d4b25'),
                    'Virgin':dict(color='#ff2e15')
                   }

driver_teams_color_2011 = {'VET':dict(color='#004c6c',dash='solid'),
                           'WEB':dict(color='#004c6c',dash='dash'),
                           
                           'HAM':dict(color='#FF8700',dash='solid'),
                           'BUT':dict(color='#FF8700',dash='dash'),
                           
                           'ALO':dict(color='#C00000',dash='solid'),
                           'MAS':dict(color='#C00000',dash='dash'),
                           
                           'ROS':dict(color='#00D2BE',dash='solid'),
                           'MSC':dict(color='#00D2BE',dash='dash'),
                           
                           'HEI':dict(color='#FFF500',dash='solid'),
                           'SEN':dict(color='#FFF500',dash='dash'),
                           'PET':dict(color='#FFF500',dash='dashdot'),
                           
                           'BAR':dict(color='#0082FA',dash='solid'),
                           'MAL':dict(color='#0082FA',dash='dash'),
                           
                           'SUT':dict(color='#F596C8',dash='solid'),
                           'DIR':dict(color='#F596C8',dash='dash'),
                           
                           'KOB':dict(color='#960000',dash='solid'),
                           'PER':dict(color='#960000',dash='dash'),
                           'DLR':dict(color='#960000',dash='dashdot'),
                           
                           'BUE':dict(color='#011AE3',dash='solid'),
                           'ALG':dict(color='#011AE3',dash='dash'),
                           
                           'KOV':dict(color='#000000',dash='solid'),
                           'TRU':dict(color='#000000',dash='dash'),
                           'CHA':dict(color='#000000',dash='dashdot'),
                           
                           'KAR':dict(color='#5d4b25',dash='solid'),
                           'RIC':dict(color='#5d4b25',dash='dash'),
                           'LIU':dict(color='#5d4b25',dash='dashdot'),
                           
                           'GLO':dict(color='#ff2e15',dash='solid'),
                           'DAM':dict(color='#ff2e15',dash='dash')
                          }
In [6]:
constructors = data_teams_2011['constructor_name'].unique()
drivers = data_2011['code'].unique()

c = data_2011.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2011 = data_2011.merge(c,on='code').sort_values(['round','Final'])

fig = px.bar(data_2011, x="code", y="points", color='constructorRef',
  animation_frame="name", animation_group="code", range_y=[0,400])
fig.show()
In [7]:
#data_teams_2011.rename({'name_y':'team','name_x':'race'}, axis=1, inplace=True)
c = data_teams_2011.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2011 = data_teams_2011.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2011, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,650])
fig.show()
In [8]:
fig1 = go.Figure()
fig2 = go.Figure()

for i in drivers:
    d = data_2011.where(data_2011['code'] == i).dropna()
    
    fig1.add_trace(go.Scatter(x=d['name'],
                              y=d['points'],
                              name=i,
                              mode='lines+markers',
                              marker=dict(color=driver_teams_color_2011[i]['color'],
                                          opacity=0.75),
                              line=dict(dash=driver_teams_color_2011[i]['dash'])))
    
    fig2.add_trace(go.Scatter(x=d['name'],
                              y=d['position'],
                              name=i,
                              mode='lines+markers',
                              hovertext=d.points,
                              marker=dict(color=driver_teams_color_2011[i]['color'],
                                          opacity=0.75),
                              line=dict(dash=driver_teams_color_2011[i]['dash'])))
fig1.show()
In [9]:
fig2['layout']['yaxis']['autorange'] = "reversed"
fig2.show()
In [10]:
fig3 = go.Figure()
fig4 = go.Figure()

for i in constructors:
    d = data_teams_2011.where(data_teams_2011['constructor_name'] == i).dropna()
    
    fig3.add_trace(go.Scatter(x=d['name'],
                              y=d['points'],
                              name=i,
                              mode='lines+markers',
                              marker=dict(color=teams_color_2011[i]['color'],opacity=0.75)))
    
    fig4.add_trace(go.Scatter(x=d['name'],
                              y=d['position'],
                              name=i,
                              mode='lines+markers',
                              hovertext=d.points,
                              marker=dict(color=teams_color_2011[i]['color'],opacity=0.75)))
fig3.show()
In [11]:
fig4['layout']['yaxis']['autorange'] = "reversed"
fig4.show()
In [12]:
teams_color_2012 = {'Red Bull':dict(color='#004c6c'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Marussia':dict(color='#6E0000'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Lotus F1':dict(color='#000000'),
                    'Sauber':dict(color='#960000'),
                    'HRT':dict(color='#5d4b25'),
                    'Caterham':dict(color='#3c5749')
                   }

driver_teams_color_2012 = {'VET':dict(color='#004c6c',dash='solid'),
                           'WEB':dict(color='#004c6c',dash='dash'),
                           
                           'HAM':dict(color='#FF8700',dash='solid'),
                           'BUT':dict(color='#FF8700',dash='dash'),
                           
                           'ALO':dict(color='#C00000',dash='solid'),
                           'MAS':dict(color='#C00000',dash='dash'),
                           
                           'ROS':dict(color='#00D2BE',dash='solid'),
                           'MSC':dict(color='#00D2BE',dash='dash'),
                           
                           'RAI':dict(color='#000000',dash='solid'),
                           'GRO':dict(color='#000000',dash='dash'),
                           'DAM':dict(color='#000000',dash='dashdot'),
                           
                           'SEN':dict(color='#0082FA',dash='solid'),
                           'MAL':dict(color='#0082FA',dash='dash'),
                           
                           'HUL':dict(color='#F596C8',dash='solid'),
                           'DIR':dict(color='#F596C8',dash='dash'),
                           
                           'KOB':dict(color='#960000',dash='solid'),
                           'PER':dict(color='#960000',dash='dash'),
                           
                           'RIC':dict(color='#011AE3',dash='solid'),
                           'VER':dict(color='#011AE3',dash='dash'),
                           
                           'KOV':dict(color='#3c5749',dash='solid'),
                           'PET':dict(color='#3c5749',dash='dash'),
                           
                           'KAR':dict(color='#5d4b25',dash='solid'),
                           'DLR':dict(color='#5d4b25',dash='dash'),
                           
                           'GLO':dict(color='#6E0000',dash='solid'),
                           'PIC':dict(color='#6E0000',dash='dash')
                         }
In [13]:
data_2012 = races_data.where(races_data['year']==2012).dropna()
data_2012 = data_2012.merge(diverstanding_data,on='raceId').dropna()
data_2012 = data_2012.merge(drivers_data,on='driverId').dropna()
data_2012.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2012 = data_2012.sort_values(['round','position'])
data_2012 = data_2012.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2012.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2012 = data_2012.merge(constructors_data,on='constructorId').dropna()
data_2012

drivers = data_2012['code'].unique()
drivers
Out[13]:
array(['BUT', 'HAM', 'VET', 'WEB', 'ALO', 'MAS', 'KOB', 'PER', 'RAI',
       'GRO', 'DAM', 'RIC', 'VER', 'DIR', 'HUL', 'ROS', 'MSC', 'MAL',
       'SEN', 'GLO', 'PIC', 'KOV', 'PET', 'DLR', 'KAR'], dtype=object)
In [14]:
c = data_2012.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2012 = data_2012.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2012, x="code", y="points", color="constructorRef",
  animation_frame="name", animation_group="code", range_y=[0,300])
fig.show()
In [15]:
fig5 = go.Figure()
fig6 = go.Figure()
for i in drivers:
    d = data_2012.where(data_2012['code'] == i).dropna().sort_values(by='round') 
    
    fig5.add_traces(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=driver_teams_color_2012[i]['color'],
                                          opacity=0.75),
                               line=dict(dash=driver_teams_color_2012[i]['dash'])))
    
    fig6.add_traces(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=driver_teams_color_2012[i]['color'],
                                          opacity=0.75),
                               line=dict(dash=driver_teams_color_2012[i]['dash'])))
fig5.show()
In [16]:
fig6['layout']['yaxis']['autorange'] = "reversed"
fig6.show()
In [17]:
data_teams_2012 = races_data.where(races_data['year']==2012).dropna()
data_teams_2012 = data_teams_2012.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2012 = data_teams_2012.merge(constructors_data,on='constructorId').dropna()
data_teams_2012.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2012 = data_teams_2012.sort_values(['round','position'])

constructors = data_teams_2012['constructor_name'].unique()
data_teams_2012
Out[17]:
year round circuitId name points position positionText wins constructorRef constructor_name
40 2012.0 1.0 1.0 Australian Grand Prix 40.0 1 1 1 mclaren McLaren
200 2012.0 1.0 1.0 Australian Grand Prix 30.0 2 2 0 red_bull Red Bull
160 2012.0 1.0 1.0 Australian Grand Prix 12.0 3 3 0 sauber Sauber
180 2012.0 1.0 1.0 Australian Grand Prix 10.0 4 4 0 ferrari Ferrari
140 2012.0 1.0 1.0 Australian Grand Prix 6.0 5 5 0 lotus_f1 Lotus F1
... ... ... ... ... ... ... ... ... ... ...
79 2012.0 20.0 18.0 Brazilian Grand Prix 76.0 8 8 1 williams Williams
139 2012.0 20.0 18.0 Brazilian Grand Prix 26.0 9 9 0 toro_rosso Toro Rosso
39 2012.0 20.0 18.0 Brazilian Grand Prix 0.0 10 10 0 caterham Caterham
19 2012.0 20.0 18.0 Brazilian Grand Prix 0.0 11 11 0 marussia Marussia
238 2012.0 20.0 18.0 Brazilian Grand Prix 0.0 12 12 0 hrt HRT

239 rows × 10 columns

In [18]:
c = data_teams_2012.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2012 = data_teams_2012.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2012, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,650])
fig.show()
In [19]:
fig7 = go.Figure()
fig8 = go.Figure()

for i in constructors:
    d = data_teams_2012.where(data_teams_2012['constructor_name'] == i).dropna()
    
    fig7.add_trace(go.Scatter(x=d['name'],
                              y=d['points'],
                              name=i,
                              mode='lines+markers',
                              marker=dict(color=teams_color_2012[i]['color'],opacity=0.75)))
    
    fig8.add_trace(go.Scatter(x=d['name'],
                              y=d['position'],
                              name=i,
                              mode='lines+markers',
                              hovertext=d.points,
                              marker=dict(color=teams_color_2012[i]['color'],opacity=0.75)))
fig7.show()
In [20]:
fig8['layout']['yaxis']['autorange'] = "reversed"
fig8.show()
In [21]:
teams_color_2013 = {'Red Bull':dict(color='#004c6c'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Marussia':dict(color='#6E0000'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Lotus F1':dict(color='#000000'),
                    'Sauber':dict(color='#960000'),
                    'Caterham':dict(color='#3c5749')
                   }

driver_teams_color_2013 = {'VET':dict(color='#004c6c',dash='solid'),
                           'WEB':dict(color='#004c6c',dash='dash'),
                           
                           'BUT':dict(color='#FF8700',dash='solid'),
                           'PER':dict(color='#FF8700',dash='dash'),
                           
                           'ALO':dict(color='#C00000',dash='solid'),
                           'MAS':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'ROS':dict(color='#00D2BE',dash='dash'),
                           
                           'RAI':dict(color='#000000',dash='solid'),
                           'GRO':dict(color='#000000',dash='dash'),
                           'KOV':dict(color='#000000',dash='dashdot'),
                           
                           'BOT':dict(color='#0082FA',dash='solid'),
                           'MAL':dict(color='#0082FA',dash='dash'),
                           
                           'SUT':dict(color='#F596C8',dash='solid'),
                           'DIR':dict(color='#F596C8',dash='dash'),
                           
                           'HUL':dict(color='#960000',dash='solid'),
                           'GUT':dict(color='#960000',dash='dash'),
                           
                           'RIC':dict(color='#011AE3',dash='solid'),
                           'VER':dict(color='#011AE3',dash='dash'),
                           
                           'PIC':dict(color='#3c5749',dash='solid'),
                           'VDG':dict(color='#3c5749',dash='dash'),
                           
                           'BIA':dict(color='#6E0000',dash='solid'),
                           'CHI':dict(color='#6E0000',dash='dash')
                         }
In [22]:
data_2013 = races_data.where(races_data['year']==2013).dropna()
data_2013 = data_2013.merge(diverstanding_data,on='raceId').dropna()
data_2013 = data_2013.merge(drivers_data,on='driverId').dropna()
data_2013.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2013 = data_2013.sort_values(['round','position'])
data_2013 = data_2013.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2013.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2013 = data_2013.merge(constructors_data,on='constructorId')
data_2013
drivers = data_2013['code'].unique()
In [23]:
c = data_2013.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2013 = data_2013.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2013, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,300])
fig.show()
In [24]:
fig9 = go.Figure()
fig10 = go.Figure()
for i in drivers:
    d = data_2012.where(data_2013['code'] == i).dropna().sort_values(by='round') 
    
    fig9.add_traces(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=driver_teams_color_2013[i]['color'],
                                          opacity=0.75),
                               line=dict(dash=driver_teams_color_2013[i]['dash'])))
    
    fig10.add_traces(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=driver_teams_color_2013[i]['color'],
                                          opacity=0.75),
                               line=dict(dash=driver_teams_color_2013[i]['dash'])))
fig9.show()
In [25]:
fig10['layout']['yaxis']['autorange'] = "reversed"
fig10.show()
In [26]:
data_teams_2013 = races_data.where(races_data['year']==2013).dropna()
data_teams_2013 = data_teams_2013.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2013 = data_teams_2013.merge(constructors_data,on='constructorId').dropna()
data_teams_2013.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2013 = data_teams_2013.sort_values(['round','position'])

constructors = data_teams_2013['constructor_name'].unique()
data_teams_2013
Out[26]:
year round circuitId name points position positionText wins constructorRef constructor_name
19 2013.0 1.0 1.0 Australian Grand Prix 30.0 1 1 0 ferrari Ferrari
0 2013.0 1.0 1.0 Australian Grand Prix 26.0 2 2 1 lotus_f1 Lotus F1
38 2013.0 1.0 1.0 Australian Grand Prix 23.0 3 3 0 red_bull Red Bull
57 2013.0 1.0 1.0 Australian Grand Prix 10.0 4 4 0 mercedes Mercedes
76 2013.0 1.0 1.0 Australian Grand Prix 10.0 5 5 0 force_india Force India
... ... ... ... ... ... ... ... ... ... ...
151 2013.0 19.0 18.0 Brazilian Grand Prix 57.0 7 7 0 sauber Sauber
132 2013.0 19.0 18.0 Brazilian Grand Prix 33.0 8 8 0 toro_rosso Toro Rosso
170 2013.0 19.0 18.0 Brazilian Grand Prix 5.0 9 9 0 williams Williams
189 2013.0 19.0 18.0 Brazilian Grand Prix 0.0 10 10 0 marussia Marussia
208 2013.0 19.0 18.0 Brazilian Grand Prix 0.0 11 11 0 caterham Caterham

209 rows × 10 columns

In [27]:
c = data_teams_2013.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2013 = data_teams_2013.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2013, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,600])
fig.show()
In [28]:
fig11 = go.Figure()
fig12 = go.Figure()

for i in constructors:
    d = data_teams_2013.where(data_teams_2013['constructor_name'] == i).dropna()
    
    fig11.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=teams_color_2013[i]['color'],opacity=0.75)))
    
    fig12.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2013[i]['color'],opacity=0.75)))
fig11.show()
In [29]:
fig12['layout']['yaxis']['autorange'] = "reversed"
fig12.show()
In [30]:
teams_color_2014 = {'Red Bull':dict(color='#004c6c'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Marussia':dict(color='#6E0000'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Lotus F1':dict(color='#000000'),
                    'Sauber':dict(color='#960000'),
                    'Caterham':dict(color='#3c5749')
                   }

driver_teams_color_2014 = {'VET':dict(color='#004c6c',dash='solid'),
                           'RIC':dict(color='#004c6c',dash='dash'),
                           
                           'BUT':dict(color='#FF8700',dash='solid'),
                           'MAG':dict(color='#FF8700',dash='dash'),
                           
                           'ALO':dict(color='#C00000',dash='solid'),
                           'RAI':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'ROS':dict(color='#00D2BE',dash='dash'),
                           
                           'MAL':dict(color='#000000',dash='solid'),
                           'GRO':dict(color='#000000',dash='dash'),
                           
                           'BOT':dict(color='#0082FA',dash='solid'),
                           'MAS':dict(color='#0082FA',dash='dash'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'HUL':dict(color='#F596C8',dash='dash'),
                           
                           'SUT':dict(color='#960000',dash='solid'),
                           'GUT':dict(color='#960000',dash='dash'),
                           
                           'KVY':dict(color='#011AE3',dash='solid'),
                           'VER':dict(color='#011AE3',dash='dash'),
                           
                           'ERI':dict(color='#3c5749',dash='solid'),
                           'STE':dict(color='#3c5749',dash='dash'),
                           'KOB':dict(color='#3c5749',dash='dashdot'),
                           'LOT':dict(color='#3c5749',dash='dot'),
                           
                           'BIA':dict(color='#6E0000',dash='solid'),
                           'CHI':dict(color='#6E0000',dash='dash')
                         }
In [31]:
data_2014 = races_data.where(races_data['year']==2014).dropna()
data_2014 = data_2014.merge(diverstanding_data,on='raceId').dropna()
data_2014 = data_2014.merge(drivers_data,on='driverId').dropna()
data_2014.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2014 = data_2014.sort_values(['round','position'])
data_2014 = data_2014.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2014.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2014 = data_2014.merge(constructors_data,on='constructorId')
data_2014
drivers = data_2014['code'].unique()
In [32]:
c = data_2014.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2014 = data_2014.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2014, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,400])
fig.show()
In [33]:
fig13 = go.Figure()
fig14 = go.Figure()
for i in drivers:
    d = data_2014.where(data_2014['code'] == i).dropna().sort_values(by='round') 
    
    fig13.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2014[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2014[i]['dash'])))
    
    fig14.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2014[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2014[i]['dash'])))
fig13.show()
In [34]:
fig14['layout']['yaxis']['autorange'] = "reversed"
fig14.show()
In [35]:
data_teams_2014 = races_data.where(races_data['year']==2014).dropna()
data_teams_2014 = data_teams_2014.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2014 = data_teams_2014.merge(constructors_data,on='constructorId').dropna()
data_teams_2014.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2014 = data_teams_2014.sort_values(['round','position'])

constructors = data_teams_2014['constructor_name'].unique()
data_teams_2014
Out[35]:
year round circuitId name points position positionText wins constructorRef constructor_name
171 2014.0 1.0 1.0 Australian Grand Prix 33.0 1 1 0 mclaren McLaren
190 2014.0 1.0 1.0 Australian Grand Prix 25.0 2 2 1 mercedes Mercedes
152 2014.0 1.0 1.0 Australian Grand Prix 18.0 3 3 0 ferrari Ferrari
133 2014.0 1.0 1.0 Australian Grand Prix 10.0 4 4 0 williams Williams
114 2014.0 1.0 1.0 Australian Grand Prix 9.0 5 5 0 force_india Force India
... ... ... ... ... ... ... ... ... ... ...
113 2014.0 19.0 24.0 Abu Dhabi Grand Prix 30.0 7 7 0 toro_rosso Toro Rosso
75 2014.0 19.0 24.0 Abu Dhabi Grand Prix 10.0 8 8 0 lotus_f1 Lotus F1
56 2014.0 19.0 24.0 Abu Dhabi Grand Prix 2.0 9 9 0 marussia Marussia
94 2014.0 19.0 24.0 Abu Dhabi Grand Prix 0.0 10 10 0 sauber Sauber
37 2014.0 19.0 24.0 Abu Dhabi Grand Prix 0.0 11 11 0 caterham Caterham

209 rows × 10 columns

In [36]:
c = data_teams_2014.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2014 = data_teams_2014.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2014, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,750])
fig.show()
In [37]:
fig15 = go.Figure()
fig16 = go.Figure()

for i in constructors:
    d = data_teams_2014.where(data_teams_2014['constructor_name'] == i).dropna()
    
    fig15.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=teams_color_2014[i]['color'],opacity=0.75)))
    
    fig16.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2014[i]['color'],opacity=0.75)))
fig15.show()
In [38]:
fig16['layout']['yaxis']['autorange'] = "reversed"
fig16.show()
In [39]:
teams_color_2015 = {'Red Bull':dict(color='#004c6c'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Manor Marussia':dict(color='#6E0000'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Lotus F1':dict(color='#000000'),
                    'Sauber':dict(color='#960000')
                   }

driver_teams_color_2015 = {'RIC':dict(color='#004c6c',dash='solid'),
                           'KVY':dict(color='#004c6c',dash='dash'),
                           
                           'BUT':dict(color='#FF8700',dash='solid'),
                           'ALO':dict(color='#FF8700',dash='dash'),
                           'MAG':dict(color='#FF8700',dash='dashdot'),
                           
                           'VET':dict(color='#C00000',dash='solid'),
                           'RAI':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'ROS':dict(color='#00D2BE',dash='dash'),
                           
                           'MAL':dict(color='#000000',dash='solid'),
                           'GRO':dict(color='#000000',dash='dash'),
                           
                           'BOT':dict(color='#0082FA',dash='solid'),
                           'MAS':dict(color='#0082FA',dash='dash'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'HUL':dict(color='#F596C8',dash='dash'),
                           
                           'ERI':dict(color='#960000',dash='solid'),
                           'NAS':dict(color='#960000',dash='dash'),
                           
                           'VER':dict(color='#011AE3',dash='solid'),
                           'SAI':dict(color='#011AE3',dash='dash'),
                           
                           'STE':dict(color='#6E0000',dash='solid'),
                           'MER':dict(color='#6E0000',dash='dash'),
                           'RSS':dict(color='#6E0000',dash='dashdot')
                         }
In [40]:
data_2015 = races_data.where(races_data['year']==2015).dropna()
data_2015 = data_2015.merge(diverstanding_data,on='raceId').dropna()
data_2015 = data_2015.merge(drivers_data,on='driverId').dropna()
data_2015.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2015 = data_2015.sort_values(['round','position'])
data_2015 = data_2015.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2015.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2015 = data_2015.merge(constructors_data,on='constructorId')
data_2015
drivers = data_2015['code'].unique()
In [41]:
c = data_2015.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2015 = data_2015.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2015, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,400])
fig.show()
In [42]:
fig17 = go.Figure()
fig18 = go.Figure()
for i in drivers:
    d = data_2015.where(data_2015['code'] == i).dropna().sort_values(by='round') 
    
    fig17.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2015[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2015[i]['dash'])))
    
    fig18.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2015[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2015[i]['dash'])))
fig17.show()
In [43]:
fig18['layout']['yaxis']['autorange'] = "reversed"
fig18.show()
In [44]:
data_teams_2015 = races_data.where(races_data['year']==2015).dropna()
data_teams_2015 = data_teams_2015.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2015 = data_teams_2015.merge(constructors_data,on='constructorId').dropna()
data_teams_2015.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2015 = data_teams_2015.sort_values(['round','position'])

constructors = data_teams_2015['constructor_name'].unique()
data_teams_2015
Out[44]:
year round circuitId name points position positionText wins constructorRef constructor_name
5 2015.0 1.0 1.0 Australian Grand Prix 43.0 1 1 1 mercedes Mercedes
24 2015.0 1.0 1.0 Australian Grand Prix 15.0 2 2 0 ferrari Ferrari
62 2015.0 1.0 1.0 Australian Grand Prix 14.0 3 3 0 sauber Sauber
43 2015.0 1.0 1.0 Australian Grand Prix 12.0 4 4 0 williams Williams
81 2015.0 1.0 1.0 Australian Grand Prix 8.0 5 5 0 red_bull Red Bull
... ... ... ... ... ... ... ... ... ... ...
170 2015.0 19.0 24.0 Abu Dhabi Grand Prix 78.0 6 6 0 lotus_f1 Lotus F1
132 2015.0 19.0 24.0 Abu Dhabi Grand Prix 67.0 7 7 0 toro_rosso Toro Rosso
75 2015.0 19.0 24.0 Abu Dhabi Grand Prix 36.0 8 8 0 sauber Sauber
151 2015.0 19.0 24.0 Abu Dhabi Grand Prix 27.0 9 9 0 mclaren McLaren
188 2015.0 19.0 24.0 Abu Dhabi Grand Prix 0.0 10 10 0 manor Manor Marussia

189 rows × 10 columns

In [45]:
c = data_teams_2015.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2015 = data_teams_2015.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2015, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,750])
fig.show()
In [46]:
fig19 = go.Figure()
fig20 = go.Figure()

for i in constructors:
    d = data_teams_2015.where(data_teams_2015['constructor_name'] == i).dropna()
    
    fig19.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=teams_color_2015[i]['color'],opacity=0.75)))
    
    fig20.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2015[i]['color'],opacity=0.75)))
fig19.show()
In [47]:
fig20['layout']['yaxis']['autorange'] = "reversed"
fig20.show()
In [48]:
teams_color_2016 = {'Red Bull':dict(color='#004c6c'),
                    'Renault':dict(color='#FFF500'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Manor Marussia':dict(color='#6E0000'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Haas F1 Team':dict(color='#ed1a3b'),
                    'Sauber':dict(color='#960000')
                   }

driver_teams_color_2016 = {'RIC':dict(color='#004c6c',dash='solid'),
                           'KVY':dict(color='#004c6c',dash='dash'),
                           'VER':dict(color='#004c6c',dash='dashdot'),
                           
                           'ALO':dict(color='#FF8700',dash='solid'),
                           'VAN':dict(color='#FF8700',dash='dash'),
                           'BUT':dict(color='#FF8700',dash='dashdot'),
                           
                           'VET':dict(color='#C00000',dash='solid'),
                           'RAI':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'ROS':dict(color='#00D2BE',dash='dash'),
                           
                           'GRO':dict(color='#ed1a3b',dash='solid'),
                           'GUT':dict(color='#ed1a3b',dash='dash'),
                           
                           'BOT':dict(color='#0082FA',dash='solid'),
                           'MAS':dict(color='#0082FA',dash='dash'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'HUL':dict(color='#F596C8',dash='dash'),
                           
                           'ERI':dict(color='#960000',dash='solid'),
                           'NAS':dict(color='#960000',dash='dash'),
                           
                           'VER':dict(color='#011AE3',dash='solid'),
                           'SAI':dict(color='#011AE3',dash='dash'),
                           'KVY':dict(color='#011AE3',dash='dashdot'),
                           
                           'HAR':dict(color='#6E0000',dash='solid'),
                           'WEH':dict(color='#6E0000',dash='dash'),
                           'OCO':dict(color='#6E0000',dash='dashdot'),
                           
                           'MAG':dict(color='#FFF500',dash='solid'),
                           'PAL':dict(color='#FFF500',dash='dash')
                         }
In [49]:
data_2016 = races_data.where(races_data['year']==2016).dropna()
data_2016 = data_2016.merge(diverstanding_data,on='raceId').dropna()
data_2016 = data_2016.merge(drivers_data,on='driverId').dropna()
data_2016.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2016 = data_2016.sort_values(['round','position'])
data_2016 = data_2016.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2016.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2016 = data_2016.merge(constructors_data,on='constructorId')
data_2016
drivers = data_2016['code'].unique()
In [50]:
c = data_2016.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2016 = data_2016.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2016, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,400])
fig.show()
In [51]:
fig21 = go.Figure()
fig22 = go.Figure()
for i in drivers:
    d = data_2016.where(data_2016['code'] == i).dropna().sort_values(by='round') 
    
    fig21.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2016[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2016[i]['dash'])))
    
    fig22.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2016[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2016[i]['dash'])))
fig21.show()
In [52]:
fig22['layout']['yaxis']['autorange'] = "reversed"
fig22.show()
In [53]:
data_teams_2016 = races_data.where(races_data['year']==2016).dropna()
data_teams_2016 = data_teams_2016.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2016 = data_teams_2016.merge(constructors_data,on='constructorId').dropna()
data_teams_2016.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2016 = data_teams_2016.sort_values(['round','position'])

constructors = data_teams_2016['constructor_name'].unique()
data_teams_2016
Out[53]:
year round circuitId name points position positionText wins constructorRef constructor_name
42 2016.0 1.0 1.0 Australian Grand Prix 43.0 1 1 1 mercedes Mercedes
210 2016.0 1.0 1.0 Australian Grand Prix 15.0 2 2 0 ferrari Ferrari
168 2016.0 1.0 1.0 Australian Grand Prix 14.0 3 3 0 williams Williams
189 2016.0 1.0 1.0 Australian Grand Prix 12.0 4 4 0 red_bull Red Bull
147 2016.0 1.0 1.0 Australian Grand Prix 8.0 5 5 0 haas Haas F1 Team
... ... ... ... ... ... ... ... ... ... ...
125 2016.0 21.0 24.0 Abu Dhabi Grand Prix 63.0 7 7 0 toro_rosso Toro Rosso
167 2016.0 21.0 24.0 Abu Dhabi Grand Prix 29.0 8 8 0 haas Haas F1 Team
104 2016.0 21.0 24.0 Abu Dhabi Grand Prix 8.0 9 9 0 renault Renault
20 2016.0 21.0 24.0 Abu Dhabi Grand Prix 2.0 10 10 0 sauber Sauber
41 2016.0 21.0 24.0 Abu Dhabi Grand Prix 1.0 11 11 0 manor Manor Marussia

231 rows × 10 columns

In [54]:
c = data_teams_2016.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2016 = data_teams_2016.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2016, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,800])
fig.show()
In [55]:
fig23 = go.Figure()
fig24 = go.Figure()

for i in constructors:
    d = data_teams_2016.where(data_teams_2016['constructor_name'] == i).dropna()
    
    fig23.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,mode='lines+markers',
                               marker=dict(color=teams_color_2016[i]['color'],opacity=0.75)))
    
    fig24.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2016[i]['color'],opacity=0.75)))
fig23.show()
In [56]:
fig24['layout']['yaxis']['autorange'] = "reversed"
fig24.show()
In [57]:
teams_color_2017 = {'Red Bull':dict(color='#004c6c'),
                    'Renault':dict(color='#FFF500'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Haas F1 Team':dict(color='#ed1a3b'),
                    'Sauber':dict(color='#960000')
                   }

driver_teams_color_2017 = {'RIC':dict(color='#004c6c',dash='solid'),
                           'VER':dict(color='#004c6c',dash='dashdot'),
                           
                           'ALO':dict(color='#FF8700',dash='solid'),
                           'VAN':dict(color='#FF8700',dash='dash'),
                           'BUT':dict(color='#FF8700',dash='dashdot'),
                           
                           'VET':dict(color='#C00000',dash='solid'),
                           'RAI':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'BOT':dict(color='#00D2BE',dash='dash'),
                           
                           'GRO':dict(color='#ed1a3b',dash='solid'),
                           'MAG':dict(color='#ed1a3b',dash='dash'),
                           
                           'STR':dict(color='#0082FA',dash='solid'),
                           'MAS':dict(color='#0082FA',dash='dash'),
                           'DIR':dict(color='#0082FA',dash='dashdot'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'OCO':dict(color='#F596C8',dash='dash'),
                           
                           'ERI':dict(color='#960000',dash='solid'),
                           'WEH':dict(color='#960000',dash='dash'),
                           'GIO':dict(color='#960000',dash='dashdot'),
                           
                           'GAS':dict(color='#011AE3',dash='solid'),
                           'SAI':dict(color='#011AE3',dash='dash'),
                           'KVY':dict(color='#011AE3',dash='dashdot'),
                           'HAR':dict(color='#011AE3',dash='dot'),
                           
                           'HUL':dict(color='#FFF500',dash='solid'),
                           'PAL':dict(color='#FFF500',dash='dash'),
                           'SAI':dict(color='#FFF500',dash='dashdot')
                         }
In [58]:
data_2017 = races_data.where(races_data['year']==2017).dropna()
data_2017 = data_2017.merge(diverstanding_data,on='raceId').dropna()
data_2017 = data_2017.merge(drivers_data,on='driverId').dropna()
data_2017.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2017 = data_2017.sort_values(['round','position'])
data_2017 = data_2017.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2017.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2017 = data_2017.merge(constructors_data,on='constructorId')
data_2017
drivers = data_2017['code'].unique()
In [59]:
c = data_2017.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2017 = data_2017.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2017, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,400])
fig.show()
In [60]:
fig25 = go.Figure()
fig26 = go.Figure()
for i in drivers:
    d = data_2017.where(data_2017['code'] == i).dropna().sort_values(by='round') 
    
    fig25.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2017[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2017[i]['dash'])))
    
    fig26.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2017[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2017[i]['dash'])))
fig25.show()
In [61]:
fig26['layout']['yaxis']['autorange'] = "reversed"
fig26.show()
In [62]:
data_teams_2017 = races_data.where(races_data['year']==2017).dropna()
data_teams_2017 = data_teams_2017.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2017 = data_teams_2017.merge(constructors_data,on='constructorId').dropna()
data_teams_2017.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2017 = data_teams_2017.sort_values(['round','position'])

constructors = data_teams_2017['constructor_name'].unique()
data_teams_2017
Out[62]:
year round circuitId name points position positionText wins constructorRef constructor_name
0 2017.0 1.0 1.0 Australian Grand Prix 37.0 1 1 1 ferrari Ferrari
20 2017.0 1.0 1.0 Australian Grand Prix 33.0 2 2 0 mercedes Mercedes
40 2017.0 1.0 1.0 Australian Grand Prix 10.0 3 3 0 red_bull Red Bull
60 2017.0 1.0 1.0 Australian Grand Prix 8.0 4 4 0 williams Williams
80 2017.0 1.0 1.0 Australian Grand Prix 7.0 5 5 0 force_india Force India
... ... ... ... ... ... ... ... ... ... ...
139 2017.0 20.0 24.0 Abu Dhabi Grand Prix 57.0 6 6 0 renault Renault
119 2017.0 20.0 24.0 Abu Dhabi Grand Prix 53.0 7 7 0 toro_rosso Toro Rosso
199 2017.0 20.0 24.0 Abu Dhabi Grand Prix 47.0 8 8 0 haas Haas F1 Team
179 2017.0 20.0 24.0 Abu Dhabi Grand Prix 30.0 9 9 0 mclaren McLaren
159 2017.0 20.0 24.0 Abu Dhabi Grand Prix 5.0 10 10 0 sauber Sauber

200 rows × 10 columns

In [63]:
c = data_teams_2017.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2017 = data_teams_2017.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2017, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,700])
fig.show()
In [64]:
fig27 = go.Figure()
fig28 = go.Figure()

for i in constructors:
    d = data_teams_2017.where(data_teams_2017['constructor_name'] == i).dropna()
    
    fig27.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,mode='lines+markers',
                               marker=dict(color=teams_color_2017[i]['color'],opacity=0.75)))
    
    fig28.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2017[i]['color'],opacity=0.75)))

fig27.show()
In [65]:
fig28['layout']['yaxis']['autorange'] = "reversed"
fig28.show()
In [66]:
teams_color_2018 = {'Red Bull':dict(color='#004c6c'),
                    'Renault':dict(color='#FFF500'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Haas F1 Team':dict(color='#ed1a3b'),
                    'Sauber':dict(color='#960000')
                   }

driver_teams_color_2018 = {'RIC':dict(color='#004c6c',dash='solid'),
                           'VER':dict(color='#004c6c',dash='dash'),
                           
                           'ALO':dict(color='#FF8700',dash='solid'),
                           'VAN':dict(color='#FF8700',dash='dash'),
                           
                           'VET':dict(color='#C00000',dash='solid'),
                           'RAI':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'BOT':dict(color='#00D2BE',dash='dash'),
                           
                           'GRO':dict(color='#ed1a3b',dash='solid'),
                           'MAG':dict(color='#ed1a3b',dash='dash'),
                           
                           'STR':dict(color='#0082FA',dash='solid'),
                           'SIR':dict(color='#0082FA',dash='dash'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'OCO':dict(color='#F596C8',dash='dash'),
                           
                           'ERI':dict(color='#960000',dash='solid'),
                           'LEC':dict(color='#960000',dash='dash'),
                           
                           'GAS':dict(color='#011AE3',dash='solid'),
                           'HAR':dict(color='#011AE3',dash='dash'),
                           
                           'HUL':dict(color='#FFF500',dash='solid'),
                           'SAI':dict(color='#FFF500',dash='dash')
                         }
In [67]:
data_2018 = races_data.where(races_data['year']==2018).dropna()
data_2018 = data_2018.merge(diverstanding_data,on='raceId').dropna()
data_2018 = data_2018.merge(drivers_data,on='driverId').dropna()
data_2018.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2018 = data_2018.sort_values(['round','position'])
data_2018 = data_2018.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2018.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2018 = data_2018.merge(constructors_data,on='constructorId')
data_2018
drivers = data_2018['code'].unique()
In [68]:
c = data_2018.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2018 = data_2018.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2018, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,450])
fig.show()
In [69]:
fig29 = go.Figure()
fig30 = go.Figure()
for i in drivers:
    d = data_2018.where(data_2018['code'] == i).dropna().sort_values(by='round') 
    
    fig29.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2018[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2018[i]['dash'])))
    
    fig30.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2018[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2018[i]['dash'])))
fig29.show()
In [70]:
fig30['layout']['yaxis']['autorange'] = "reversed"
fig30.show()
In [71]:
data_teams_2018 = races_data.where(races_data['year']==2018).dropna()
data_teams_2018 = data_teams_2018.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2018 = data_teams_2018.merge(constructors_data,on='constructorId').dropna()
data_teams_2018.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2018 = data_teams_2018.sort_values(['round','position'])

constructors = data_teams_2018['constructor_name'].unique()
data_teams_2018
Out[71]:
year round circuitId name points position positionText wins constructorRef constructor_name
0 2018.0 1.0 1.0 Australian Grand Prix 40.0 1 1 1 ferrari Ferrari
21 2018.0 1.0 1.0 Australian Grand Prix 22.0 2 2 0 mercedes Mercedes
42 2018.0 1.0 1.0 Australian Grand Prix 20.0 3 3 0 red_bull Red Bull
63 2018.0 1.0 1.0 Australian Grand Prix 12.0 4 4 0 mclaren McLaren
84 2018.0 1.0 1.0 Australian Grand Prix 7.0 5 5 0 renault Renault
... ... ... ... ... ... ... ... ... ... ...
83 2018.0 21.0 24.0 Abu Dhabi Grand Prix 62.0 6 6 0 mclaren McLaren
125 2018.0 21.0 24.0 Abu Dhabi Grand Prix 52.0 7 7 0 force_india Force India
146 2018.0 21.0 24.0 Abu Dhabi Grand Prix 48.0 8 8 0 sauber Sauber
188 2018.0 21.0 24.0 Abu Dhabi Grand Prix 33.0 9 9 0 toro_rosso Toro Rosso
167 2018.0 21.0 24.0 Abu Dhabi Grand Prix 7.0 10 10 0 williams Williams

210 rows × 10 columns

In [72]:
c = data_teams_2018.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2018 = data_teams_2018.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2018, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,700])
fig.show()
In [73]:
fig31 = go.Figure()
fig32 = go.Figure()

for i in constructors:
    d = data_teams_2018.where(data_teams_2018['constructor_name'] == i).dropna()
    
    fig31.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=teams_color_2018[i]['color'],opacity=0.75)))
    
    fig32.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2018[i]['color'],opacity=0.75)))
fig31.show()
In [74]:
fig32['layout']['yaxis']['autorange'] = "reversed"
fig32.show()
In [75]:
teams_color_2019 = {'Red Bull':dict(color='#004c6c'),
                    'Renault':dict(color='#FFF500'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Racing Point':dict(color='#F596C8'),
                    'Haas F1 Team':dict(color='#ed1a3b'),
                    'Alfa Romeo':dict(color='#960000')
                   }

driver_teams_color_2019 = {'VER':dict(color='#004c6c',dash='solid'),
                           'GAS':dict(color='#004c6c',dash='dash'),
                           'ALB':dict(color='#004c6c',dash='dashdot'),
                           
                           'SAI':dict(color='#FF8700',dash='solid'),
                           'NOR':dict(color='#FF8700',dash='dash'),
                           
                           'VET':dict(color='#C00000',dash='solid'),
                           'LEC':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'BOT':dict(color='#00D2BE',dash='dash'),
                           
                           'GRO':dict(color='#ed1a3b',dash='solid'),
                           'MAG':dict(color='#ed1a3b',dash='dash'),
                           
                           'RUS':dict(color='#0082FA',dash='solid'),
                           'KUB':dict(color='#0082FA',dash='dash'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'STR':dict(color='#F596C8',dash='dash'),
                           
                           'RAI':dict(color='#960000',dash='solid'),
                           'GIO':dict(color='#960000',dash='dash'),
                           
                           'ALB':dict(color='#011AE3',dash='solid'),
                           'GAS':dict(color='#011AE3',dash='dash'),
                           'KVY':dict(color='#011AE3',dash='dashdot'),
                           
                           'RIC':dict(color='#FFF500',dash='solid'),
                           'HUL':dict(color='#FFF500',dash='dash')
                         }
In [76]:
data_2019 = races_data.where(races_data['year']==2019).dropna()
data_2019 = data_2019.merge(diverstanding_data,on='raceId').dropna()
data_2019 = data_2019.merge(drivers_data,on='driverId').dropna()
data_2019.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2019 = data_2019.sort_values(['round','position'])
data_2019 = data_2019.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2019.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2019 = data_2019.merge(constructors_data,on='constructorId')
data_2019
drivers = data_2019['code'].unique()
In [77]:
c = data_2019.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2019 = data_2019.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2019, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,450])
fig.show()
In [78]:
fig33 = go.Figure()
fig34 = go.Figure()
for i in drivers:
    d = data_2019.where(data_2019['code'] == i).dropna().sort_values(by='round')
    
    fig33.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2019[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2019[i]['dash'])))
    
    fig34.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2019[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2019[i]['dash'])))
fig33.show()
In [79]:
fig34['layout']['yaxis']['autorange'] = "reversed"
fig34.show()
In [80]:
data_teams_2019 = races_data.where(races_data['year']==2019).dropna()
data_teams_2019 = data_teams_2019.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2019 = data_teams_2019.merge(constructors_data,on='constructorId').dropna()
data_teams_2019.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2019 = data_teams_2019.sort_values(['round','position'])

constructors = data_teams_2019['constructor_name'].unique()
data_teams_2019
Out[80]:
year round circuitId name points position positionText wins constructorRef constructor_name
84 2019.0 1.0 1.0 Australian Grand Prix 44.0 1 1 1 mercedes Mercedes
42 2019.0 1.0 1.0 Australian Grand Prix 22.0 2 2 0 ferrari Ferrari
63 2019.0 1.0 1.0 Australian Grand Prix 15.0 3 3 0 red_bull Red Bull
21 2019.0 1.0 1.0 Australian Grand Prix 8.0 4 4 0 haas Haas F1 Team
0 2019.0 1.0 1.0 Australian Grand Prix 6.0 5 5 0 renault Renault
... ... ... ... ... ... ... ... ... ... ...
167 2019.0 21.0 24.0 Abu Dhabi Grand Prix 85.0 6 6 0 toro_rosso Toro Rosso
146 2019.0 21.0 24.0 Abu Dhabi Grand Prix 73.0 7 7 0 racing_point Racing Point
125 2019.0 21.0 24.0 Abu Dhabi Grand Prix 57.0 8 8 0 alfa Alfa Romeo
41 2019.0 21.0 24.0 Abu Dhabi Grand Prix 28.0 9 9 0 haas Haas F1 Team
209 2019.0 21.0 24.0 Abu Dhabi Grand Prix 1.0 10 10 0 williams Williams

210 rows × 10 columns

In [81]:
c = data_teams_2019.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2019 = data_teams_2019.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2019, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,750])
fig.show()
In [82]:
fig35 = go.Figure()
fig36 = go.Figure()

for i in constructors:
    d = data_teams_2019.where(data_teams_2019['constructor_name'] == i).dropna()
    
    fig35.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=teams_color_2019[i]['color'],opacity=0.75)))
    
    fig36.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2019[i]['color'],opacity=0.75)))
fig35.show()
In [83]:
fig36['layout']['yaxis']['autorange'] = "reversed"
fig36.show()
In [84]:
teams_color_2020 = {'Red Bull':dict(color='#004c6c'),
                    'Renault':dict(color='#FFF500'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Williams':dict(color='#0082FA'),
                    'AlphaTauri':dict(color='#011AE3'),
                    'Racing Point':dict(color='#F596C8'),
                    'Haas F1 Team':dict(color='#ed1a3b'),
                    'Alfa Romeo':dict(color='#960000')
                   }

driver_teams_color_2020 = {'VER':dict(color='#004c6c',dash='solid'),
                           'ALB':dict(color='#004c6c',dash='dashdot'),
                           
                           'SAI':dict(color='#FF8700',dash='solid'),
                           'NOR':dict(color='#FF8700',dash='dash'),
                           
                           'VET':dict(color='#C00000',dash='solid'),
                           'LEC':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'BOT':dict(color='#00D2BE',dash='dash'),
                           'RUS':dict(color='#00D2BE',dash='dashdot'),
                           
                           'GRO':dict(color='#ed1a3b',dash='solid'),
                           'MAG':dict(color='#ed1a3b',dash='dash'),
                           'FIT':dict(color='#ed1a3b',dash='dashdot'),
                           
                           'RUS':dict(color='#0082FA',dash='solid'),
                           'LAT':dict(color='#0082FA',dash='dash'),
                           'AIT':dict(color='#0082FA',dash='dashdot'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'STR':dict(color='#F596C8',dash='dash'),
                           'HUL':dict(color='#F596C8',dash='dashdot'),
                           
                           'RAI':dict(color='#960000',dash='solid'),
                           'GIO':dict(color='#960000',dash='dash'),
                           
                           'GAS':dict(color='#011AE3',dash='solid'),
                           'KVY':dict(color='#011AE3',dash='dash'),
                           
                           'RIC':dict(color='#FFF500',dash='solid'),
                           'OCO':dict(color='#FFF500',dash='dash')
                         }
In [85]:
data_2020 = races_data.where(races_data['year']==2020).dropna()
data_2020 = data_2020.merge(diverstanding_data,on='raceId').dropna()
data_2020 = data_2020.merge(drivers_data,on='driverId').dropna()
data_2020.drop(columns=['date','time','url_x','url_y','driverStandingsId','driverId','dob','number','nationality','raceId'],inplace=True)
data_2020 = data_2020.sort_values(['round','position'])
data_2020
drivers = data_2020['code'].unique()
In [86]:
c = data_2020.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2020 = data_2020.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2020, x="code", y="points", color="code",
  animation_frame="name", animation_group="code", range_y=[0,350])
fig.show()
In [87]:
fig37 = go.Figure()
fig38 = go.Figure()
for i in drivers:
    d = data_2020.where(data_2020['code'] == i).dropna().sort_values(by='round') 
    
    fig37.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2020[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2020[i]['dash'])))
    
    fig38.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2020[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2020[i]['dash'])))
fig37.show()
In [88]:
fig38['layout']['yaxis']['autorange'] = "reversed"
fig38.show()
In [89]:
data_teams_2020 = races_data.where(races_data['year']==2020).dropna()
data_teams_2020 = data_teams_2020.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2020 = data_teams_2020.merge(constructors_data,on='constructorId').dropna()
data_teams_2020.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2020 = data_teams_2020.sort_values(['round','position'])

constructors = data_teams_2020['constructor_name'].unique()
data_teams_2020
Out[89]:
year round circuitId name points position positionText wins constructorRef constructor_name
153 2020.0 1.0 70.0 Austrian Grand Prix 37.0 1 1 1 mercedes Mercedes
119 2020.0 1.0 70.0 Austrian Grand Prix 26.0 2 2 0 mclaren McLaren
136 2020.0 1.0 70.0 Austrian Grand Prix 19.0 3 3 0 ferrari Ferrari
102 2020.0 1.0 70.0 Austrian Grand Prix 8.0 4 4 0 racing_point Racing Point
85 2020.0 1.0 70.0 Austrian Grand Prix 6.0 5 5 0 alphatauri AlphaTauri
... ... ... ... ... ... ... ... ... ... ...
152 2020.0 17.0 24.0 Abu Dhabi Grand Prix 131.0 6 6 0 ferrari Ferrari
101 2020.0 17.0 24.0 Abu Dhabi Grand Prix 107.0 7 7 1 alphatauri AlphaTauri
67 2020.0 17.0 24.0 Abu Dhabi Grand Prix 8.0 8 8 0 alfa Alfa Romeo
16 2020.0 17.0 24.0 Abu Dhabi Grand Prix 3.0 9 9 0 haas Haas F1 Team
50 2020.0 17.0 24.0 Abu Dhabi Grand Prix 0.0 10 10 0 williams Williams

170 rows × 10 columns

In [90]:
c = data_teams_2020.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2020 = data_teams_2020.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2020, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,750])
fig.show()
In [91]:
fig39 = go.Figure()
fig40 = go.Figure()

for i in constructors:
    d = data_teams_2020.where(data_teams_2020['constructor_name'] == i).dropna()
    
    fig39.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=teams_color_2020[i]['color'],opacity=0.75)))
    
    fig40.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2020[i]['color'],opacity=0.75)))
fig39.show()
In [92]:
fig40['layout']['yaxis']['autorange'] = "reversed"
fig40.show()